import { useScanStore } from '@renderer/store/pinia/scan'
import { useSystemStore } from '@renderer/store/pinia/system'
import { usePresetStore } from '@renderer/store/pinia/preset'
import { useDbSettingStore } from '@renderer/store/pinia/dbSetting'
import { useImageStore } from '@renderer/store/pinia/image'
import { useSystemSettingStore } from '@renderer/store/pinia/systemSetting'
import { Persistent } from '@renderer/store/persistent'
import semver from 'semver/preload'

const initStore = () => {
  useSystemStore()
  useScanStore()
  useDbSettingStore()
  useImageStore()
  const presetStore = usePresetStore()
  const systemSettingStore = useSystemSettingStore()
  // 1. 尝试读取系统设置。读取到则设置到store中。
  // 2. 没有读取到则采用默认的系统设置。
  // 3. 监听store中的变化，将其同步到持久化中。
  // todo 这里打包后在115上执行出现错误。出现错误
  // getAndListenStoreChange(systemSettingStore, 'systemSetting')
  // getAndListenStoreChange(presetStore, 'presetConfig')
}

const getAndListenStoreChange = (store, persistentKey) => {
  getStoredSetting(store, persistentKey)
  listenStoreChange(store, persistentKey)
}

const listenStoreChange = (store, persistentKey) => {
  store.$subscribe((_, state) => {
    Persistent.set(persistentKey, state)
  })
}

const getStoredSetting = (store, persistentKey) => {
  let value = Persistent.get(persistentKey)
  // 没有已存储的信息，则是第一次进入，持久化。
  if (!value) {
    console.log('没有持久化用户配置，写入默认配置')
    Persistent.set(persistentKey, store)
    return
  }
  value = JSON.parse(value)
  const historyVersion = value.version
  const currentVersion = store.version
  // 有已经存储的信息。
  // 比较新老版本。有新版本，则覆盖老版本写入文件。
  // 否则同样的版本，则将文件更新到内存中。
  if (semver.gt(currentVersion, historyVersion)) {
    console.log('发现新版本用户配置。更新配置文件')
    Persistent.set(persistentKey, store)
  } else {
    console.log('版本一致，更新内存')
    store.$patch(value)
  }
}


export {
  initStore
}
